package com.ipet.manage.service;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ipet.common.vo.EasyUIResult;
import com.ipet.manage.mapper.ItemMapper;
import com.ipet.manage.pojo.Item;
import com.ipet.manage.pojo.ItemDesc;

import redis.clients.jedis.JedisCluster;

@Service
public class ItemServiceImpl implements ItemService {
	@Autowired
	private ItemMapper itemMapper;
	
/*	@Autowired
	private ItemDescMapper itemDescMapper;
	
	@Autowired
	private JedisCluster jedisCluster;
	
	private static  ObjectMapper objectMapper = new ObjectMapper();
	public List<Item> findAll() {
		return itemMapper.findAll();
	}
	
	
	public EasyUIResult findItemByPage(int page, int rows) {
		int total = itemMapper.findItemCount();
		
		*//**
		 * 分页的sql
		 * SELECT * FROM tb_item ORDER BY updated DESC LIMIT 0,5
		 * 通用的参数
		 * 要求：每页展现20条
		 * 语法:select ... limit 起始位置,加载多少数据
		 * 第1页 select ...LIMIT 0,20
		 * 第2页 select ...LIMIT 20,20
		 * 第3页 select ...LIMIT 40,20
		 * 第N页 select ...LIMIT (page-1)*rows,rows
		 *//*
		int begin = (page-1)*rows;
		
		List<Item> itemList = itemMapper.findItemByPage(begin,rows);
		return new EasyUIResult(total, itemList);
		
	}


	public String finItemCatNameById(Long itemCatId) {
		return itemMapper.findItemCatNameById(itemCatId);
	}
	
	*//**
	 * 思考：
	 * 	1.item表的主键是自增的，所以只有当item数据插入到数据库中时
	 * 才能查询item的Id值
	 *  2.如果获取不到item的Id只能通过传入的数据进行where条件的拼接
	 *  但是这样的做法 不能一定满足需求 可能出现重复数据
	 *//*

	//业务层处理补全数据
	public void saveItem(Item item,String desc) {
		//商品表的新增
		item.setStatus(1);//状态设定为正常
		item.setCreated(new Date());//设定新增时间
		item.setUpdated(item.getCreated());//设定修改时间
		itemMapper.insert(item);
		
		//商品描述表的新增
		ItemDesc itemDesc = new ItemDesc();
		itemDesc.setItemId(item.getId());
		
		itemDesc.setItemDesc(desc);
		itemDesc.setCreated(item.getCreated());
		itemDesc.setUpdated(item.getCreated());
		itemDescMapper.insert(itemDesc);
		
		try {
			String jsonData = objectMapper.writeValueAsString(item);
			String key = "ITEM_"+item.getId();
			jedisCluster.set(key, jsonData);
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		}
	}

	*//**
	 * 动态修改的思路
	 * user(user_id,user_name,user_sex)
	 * update user set user_name=tom,user_sex=男
	 * where user_id=1
	 * 说明：
	 * 	如果在做修改操作时，如果某项数据为空则空数据会将数据库中原有数据覆盖
	 * 这样做不好，
	 * 动态修改:
	 * 1.首先判断参数中的数据是否为null,如果数据为null则不参与修改
	 * lg:user对象 (id=1,name=tom,sex=null)
	 * 根据动态修改的原则会形成以下的sql
	 * update user set user_name=tom where user_id=1
	 *//*
	
	
	*//**
	 * 商品描述信息的修改
	 * 思路:
	 * 	1.应该将数据补齐	为ItemDesc对象添加itemId和修改时间
	 * 	2.通过通用Mapper采用动态更新的方式更新
	 * @param item
	 * @param desc
	 *//*
	public void updateItem(Item item,String desc) {
		//准备修改时间
		item.setUpdated(new Date());
		//动态修改
		itemMapper.updateByPrimaryKeySelective(item);
		
		ItemDesc itemDesc = new ItemDesc();
		itemDesc.setItemId(item.getId());	//获取商品ID
		itemDesc.setUpdated(item.getUpdated());
		itemDesc.setItemDesc(desc);
		itemDescMapper.updateByPrimaryKeySelective(itemDesc);
		
		//修改操作时应该将缓存删除
		jedisCluster.del("ITEM_"+item.getId());
	}

	public void deleteItem(Long[] ids) {
		//删除商品数据
		itemMapper.deleteByIDS(ids);
		//删除商品描述信息
		itemDescMapper.deleteByIDS(ids);
		
		for(Long id:ids){
			jedisCluster.del("ITEM_"+id);
		}
	}


	public void updateStatus(Long[] ids, int status) {
		itemMapper.updateStatus(ids,status);
	}


	public ItemDesc findItemDesc(Long itemId) {
		return itemDescMapper.selectByPrimaryKey(itemId);
	}
*/

	@Override
	public Item findItemById(Long itemId) {
		return itemMapper.findItemById(itemId);
	}
	
	
}
